﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace NamazVakti
{
    [Serializable]
    public class Takvim
    {
        public List<NamazVakitleri> Vakitler { get; set; }

        public delegate void ChangedDelegate();
        public event ChangedDelegate Changed;

        public Takvim()
        {
            Vakitler = new List<NamazVakitleri>();
        }

        public NamazVakitleri this[DateTime index]
        {
            get
            {
                return Find(index);
            }
        }

        public void Add(NamazVakitleri v)
        {
            if (Contains(v)) throw new Exception("Bu eleman zaten eklenmişti!");
            //Namz süreleri hesaplanıyor
            v.Imsak.Interval = (int)(v.Gunes.DateTime - v.Imsak.DateTime).TotalMinutes;
            v.Gunes.Interval = (int)(v.Ogle.DateTime - v.Gunes.DateTime).TotalMinutes;
            v.Ogle.Interval = (int)(v.Ikindi.DateTime - v.Ogle.DateTime).TotalMinutes;
            v.Ikindi.Interval = (int)(v.Aksam.DateTime - v.Ikindi.DateTime).TotalMinutes;
            v.Aksam.Interval = (int)(v.Yatsi.DateTime - v.Aksam.DateTime).TotalMinutes;
            v.Yatsi.Interval = (int)(v.Date.Date.AddDays(1) - v.Yatsi.DateTime).TotalMinutes;
            //Namaz süreleri hesaplandı
            Vakitler.Add(v);
        }

        protected NamazVakitleri Find(DateTime date)
        {
            foreach (NamazVakitleri v in Vakitler)
                if (v.Date.Date == date.Date)
                    return v;
            return null;
        }

        public bool Contains(NamazVakitleri v)
        {
            return Contains(v.Date);
        }

        public bool Contains(DateTime d)
        {
            return Find(d) != null;
        }

        public void Update()
        {
            string resultPage = CustomWebClient.GetResult();
            HtmlParser parser = new HtmlParser(resultPage);
            HtmlTag tag = new HtmlTag();

            parser.ParseNext("table", out tag);
            parser.ParseNext("table", out tag);

            parser.ParseNext("tr", out tag);
            parser.ParseNext("tr", out tag);

            do
            {
                try
                {
                    NamazVakitleri vakitler = new NamazVakitleri();

                    parser.ParseNext("td", out tag);//tarih
                    vakitler.Date = parser.GetCurrentValueAsDate();

                    parser.ParseNext("td", out tag);//imsak
                    vakitler.Imsak.DateTime = vakitler.Date.SumTimeOfDay(parser.GetCurrentValueAsTime());

                    parser.ParseNext("td", out tag);//güneş
                    vakitler.Gunes.DateTime = vakitler.Date.SumTimeOfDay(parser.GetCurrentValueAsTime());

                    parser.ParseNext("td", out tag);//öğle
                    vakitler.Ogle.DateTime = vakitler.Date.SumTimeOfDay(parser.GetCurrentValueAsTime());

                    parser.ParseNext("td", out tag);//ikindi
                    vakitler.Ikindi.DateTime = vakitler.Date.SumTimeOfDay(parser.GetCurrentValueAsTime());

                    parser.ParseNext("td", out tag);//akşam
                    vakitler.Aksam.DateTime = vakitler.Date.SumTimeOfDay(parser.GetCurrentValueAsTime());

                    parser.ParseNext("td", out tag);//yatsı
                    vakitler.Yatsi.DateTime = vakitler.Date.SumTimeOfDay(parser.GetCurrentValueAsTime());

                    parser.ParseNext("td", out tag);//kıble saati
                    //vakitler.KibleSaati = SumDate(vakitler.Date, parser.GetCurrentValueAsTime());

                    Add(vakitler);
                }
                catch (Exception ex)
                {
                    break;
                }
            } while (!parser.EOF);

            if (Changed != null)
                Changed();

        }
    }
}
